﻿using Aliphant.Mvvm.XEvent.Models;

namespace Aliphant.Mvvm.XEvent.Interface
{
    public interface IXContainer
    {
        void Register<TService>() where TService : class, new();

        void Register<TService>(Func<TService> factory) where TService : class;

        TService Resolve<TService>() where TService : class, new();


        TService Resolve<TService>(string name) where TService : class, new();

        void Register<TService>(string name) where TService : class, new();

        void RegisterNavigation<TService>(string name)  where TService : class, new();

        void NavigateTo(string region, string name, NavigateParameter navigateParameter);

        void NavigateTo(string region, string name);

        void RegisterRegion<TService>(TService region, string regionName) where TService : class, new();

        void CancelRegister(string name);
    }
}
